56 research outputs found

    Lisp, Jazz, Aikido -- Three Expressions of a Single Essence

    Full text link
    The relation between Science (what we can explain) and Art (what we can't) has long been acknowledged and while every science contains an artistic part, every art form also needs a bit of science. Among all scientific disciplines, programming holds a special place for two reasons. First, the artistic part is not only undeniable but also essential. Second, and much like in a purely artistic discipline, the act of programming is driven partly by the notion of aesthetics: the pleasure we have in creating beautiful things. Even though the importance of aesthetics in the act of programming is now unquestioned, more could still be written on the subject. The field called "psychology of programming" focuses on the cognitive aspects of the activity, with the goal of improving the productivity of programmers. While many scientists have emphasized their concern for aesthetics and the impact it has on their activity, few computer scientists have actually written about their thought process while programming. What makes us like or dislike such and such language or paradigm? Why do we shape our programs the way we do? By answering these questions from the angle of aesthetics, we may be able to shed some new light on the art of programming. Starting from the assumption that aesthetics is an inherently transversal dimension, it should be possible for every programmer to find the same aesthetic driving force in every creative activity they undertake, not just programming, and in doing so, get deeper insight on why and how they do things the way they do. On the other hand, because our aesthetic sensitivities are so personal, all we can really do is relate our own experiences and share it with others, in the hope that it will inspire them to do the same. My personal life has been revolving around three major creative activities, of equal importance: programming in Lisp, playing Jazz music, and practicing Aikido. But why so many of them, why so different ones, and why these specifically? By introspecting my personal aesthetic sensitivities, I eventually realized that my tastes in the scientific, artistic, and physical domains are all motivated by the same driving forces, hence unifying Lisp, Jazz, and Aikido as three expressions of a single essence, not so different after all. Lisp, Jazz, and Aikido are governed by a limited set of rules which remain simple and unobtrusive. Conforming to them is a pleasure. Because Lisp, Jazz, and Aikido are inherently introspective disciplines, they also invite you to transgress the rules in order to find your own. Breaking the rules is fun. Finally, if Lisp, Jazz, and Aikido unify so many paradigms, styles, or techniques, it is not by mere accumulation but because they live at the meta-level and let you reinvent them. Working at the meta-level is an enlightening experience. Understand your aesthetic sensitivities and you may gain considerable insight on your own psychology of programming. Mine is perhaps common to most lispers. Perhaps also common to other programming communities, but that, is for the reader to decide..

    Ergonomics and HMI concerns in Mule: towards intelligent input methods

    Get PDF
    International audienceThis paper presents some ergonomics and Human Machine Interaction problems that several input methods (notably the French ones) introduce in Emacs 1. First, a general overview of the available input methods is given. Then, some ergonomics problems are described. Finally, some ideas are proposed to improve the quality of these input methods

    LaTeX curricula vitae with the CurVe class

    Get PDF
    International audienceCurVe is a LaTeX2ε class for writing curricula vitae (cv). It provides a set of commands to create headers, rubrics, entries in these rubrics etc. CurVe will then format your cv with a consistent layout while you can just concentrate on the contents. The layout of a CurVe cv is highly customizable. CurVe also has a very special feature known as the flavor mechanism: it is able to manage different " flavors " (versions) of your cv simultaneously. CurVe is distributed under the terms of the LPPL license. This paper describes the features available in version 1.11

    Clarification Proposal for CLHS Section 22.3

    Get PDF
    CDR #07.Note: CDR (the Common Lisp Document Repository) is an archive storing documents related to the Common Lisp Standard (clariication, modification, extension proposals etc.).Section 22.3 "Formatted Output" of the Common Lisp Hyperspec describes the syntax and semantics of format directives. We believe that the standard is underspecified. We propose to clarify that section, and suggest that Common Lisp implementations conform to the current behavior of CMU-CL, CCL, CLISP, Allegro and LispWorks

    CLOS Efficiency: Instantiation: On the Behavior and Performance of Lisp, Part 2.1

    Get PDF
    International audienceThis article reports the results of an ongoing experimental research on the behavior and performance of CLOS, the COMMON-LISP Object System. Our purpose is to evaluate the behavior and performance of the 3 most important characteristics of any dynamic object-oriented system: class instantiation, slot access and dynamic dispatch. This paper describes the results of our experiments on instantia-tion. We evaluate the efficiency of the instantiation process in both C++ and LISP under a combination of parameters such as slot types or classes hierarchy. We show that in a non-optimized configuration where safety is given priority on speed, the behavior of C++ and LISP instantiation can be quite different, which is also the case amongst different LISP compilers. On the other hand, we demonstrate that when compilation is tuned for speed, instantiation in LISP becomes faster than in C++

    Context-Oriented Image Processing: Reconciling genericity and performance through contexts

    Get PDF
    International audienceGenericity aims at providing a very high level of abstraction in order, for instance, to separate the general shape of an algorithm from specific implementation details. Reaching a high level of genericity through regular object-oriented techniques has two major drawbacks, however: code cluttering (e.g. class / method proliferation) and performance degradation (e.g. dynamic dispatch). In this paper, we explore a potential use for the Context-Oriented programming paradigm in order to maintain a high level of genericity in an experimental image processing library, without sacrificing either the performance or the original object-oriented design of the application

    Strategies for typecase optimization

    Get PDF
    International audienceWe contrast two approaches to optimizing the Common Lisp typecase macro expansion. The first approach is based on heuristics intended to estimate run time performance of certain type checks involving Common Lisp type specifiers. The technique may, depending on code size, exhaustively search the space of permutations of the type checks, intent on finding the optimal order. With the second technique, we represent a typecase form as a type specifier, encapsulating the side-effecting non-Boolean parts so as to appear compatible with the Common Lisp type algebra operators. The encapsulated expressions are specially handled so that the Common Lisp type algebra functions preserve them, and we can unwrap them after a process of Boolean reduction into efficient Common Lisp code, maintaining the appropriate side effects but eliminating unnecessary type checks. Both approaches allow us to identify un-reachable code, test for exhaustiveness of the clauses and eliminate type checks which are calculated to be redundant

    DĂ©finir le virtuel: une approche cognitive

    Get PDF
    International audienceCet article décrit l'élaboration théorique d'une caractérisation cognitive du virtuel. Plutôt que de définir le virtuel en tant que tel, nous montrons qu'il est plus intéressant de définir les processus de virtualisation, c'est à dire les mécanismes cognitifs qui font qu'à partir d'une situation réelle, l'humain entre progressivement dans le virtuel. Dans un premier temps, un modèle cognitif décrivant l'interaction entre un humain et son environnement est proposé, le modèle MrIC. Les processus de virtualisation sont ensuite définis et nous permettent d'obtenir un certain nombre de variantes de ce modèle, décrivant les grandes catégories de situations virtualisées: situations de type CAO, situations dites «immersives» (avec représentation virtuelle de l'humain) etc
    • …
    corecore